{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Ot79jiI7GiHR"
      },
      "source": [
        "# Fashion MNIST with Keras and TPUs\n",
        "\n",
        "<table class=\"tfo-notebook-buttons\" align=\"left\">\n",
        " <td>\n",
        "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://github.com/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb\"><img src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" />View source on GitHub</a>\n",
        "  </td>\n",
        "</table>",
        "Let's try out using `tf.keras` and Cloud TPUs to train a model on the fashion MNIST dataset.\n",
        "\n",
        "First, let's grab our dataset using `tf.keras.datasets`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 207
        },
        "colab_type": "code",
        "id": "Zo-Yk6LFGfSf",
        "outputId": "45fa9560-7ffa-41ac-fa7b-2d541d0725ad"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz\n",
            "32768/29515 [=================================] - 0s 0us/step\n",
            "40960/29515 [=========================================] - 0s 0us/step\n",
            "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz\n",
            "26427392/26421880 [==============================] - 0s 0us/step\n",
            "26435584/26421880 [==============================] - 0s 0us/step\n",
            "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz\n",
            "16384/5148 [===============================================================================================] - 0s 0us/step\n",
            "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz\n",
            "4423680/4422102 [==============================] - 0s 0us/step\n",
            "4431872/4422102 [==============================] - 0s 0us/step\n"
          ]
        }
      ],
      "source": [
        "import tensorflow as tf\n",
        "import numpy as np\n",
        "\n",
        "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()\n",
        "\n",
        "# add empty color dimension\n",
        "x_train = np.expand_dims(x_train, -1)\n",
        "x_test = np.expand_dims(x_test, -1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Hgc2FZKVMx15"
      },
      "source": [
        "# Defining our model\n",
        "\n",
        "We will use a standard conv-net for this example.  We have 3 layers with drop-out and batch normalization between each layer."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 760
        },
        "colab_type": "code",
        "id": "W7gMbs70GxA7",
        "outputId": "86dd38ea-c39f-4df7-a69d-98c4f50cd16c"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "batch_normalization (BatchNo (None, 28, 28, 1)         4         \n",
            "_________________________________________________________________\n",
            "conv2d (Conv2D)              (None, 28, 28, 64)        1664      \n",
            "_________________________________________________________________\n",
            "max_pooling2d (MaxPooling2D) (None, 14, 14, 64)        0         \n",
            "_________________________________________________________________\n",
            "dropout (Dropout)            (None, 14, 14, 64)        0         \n",
            "_________________________________________________________________\n",
            "batch_normalization_1 (Batch (None, 14, 14, 64)        256       \n",
            "_________________________________________________________________\n",
            "conv2d_1 (Conv2D)            (None, 14, 14, 128)       204928    \n",
            "_________________________________________________________________\n",
            "max_pooling2d_1 (MaxPooling2 (None, 7, 7, 128)         0         \n",
            "_________________________________________________________________\n",
            "dropout_1 (Dropout)          (None, 7, 7, 128)         0         \n",
            "_________________________________________________________________\n",
            "batch_normalization_2 (Batch (None, 7, 7, 128)         512       \n",
            "_________________________________________________________________\n",
            "conv2d_2 (Conv2D)            (None, 7, 7, 256)         819456    \n",
            "_________________________________________________________________\n",
            "max_pooling2d_2 (MaxPooling2 (None, 3, 3, 256)         0         \n",
            "_________________________________________________________________\n",
            "dropout_2 (Dropout)          (None, 3, 3, 256)         0         \n",
            "_________________________________________________________________\n",
            "flatten (Flatten)            (None, 2304)              0         \n",
            "_________________________________________________________________\n",
            "dense (Dense)                (None, 256)               590080    \n",
            "_________________________________________________________________\n",
            "activation (Activation)      (None, 256)               0         \n",
            "_________________________________________________________________\n",
            "dropout_3 (Dropout)          (None, 256)               0         \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 10)                2570      \n",
            "_________________________________________________________________\n",
            "activation_1 (Activation)    (None, 10)                0         \n",
            "=================================================================\n",
            "Total params: 1,619,470\n",
            "Trainable params: 1,619,084\n",
            "Non-trainable params: 386\n",
            "_________________________________________________________________\n"
          ]
        }
      ],
      "source": [
        "model = tf.keras.models.Sequential()\n",
        "model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))\n",
        "model.add(tf.keras.layers.Conv2D(64, (5, 5), padding='same', activation='elu'))\n",
        "model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))\n",
        "model.add(tf.keras.layers.Dropout(0.25))\n",
        "\n",
        "model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))\n",
        "model.add(tf.keras.layers.Conv2D(128, (5, 5), padding='same', activation='elu'))\n",
        "model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))\n",
        "model.add(tf.keras.layers.Dropout(0.25))\n",
        "\n",
        "model.add(tf.keras.layers.BatchNormalization(input_shape=x_train.shape[1:]))\n",
        "model.add(tf.keras.layers.Conv2D(256, (5, 5), padding='same', activation='elu'))\n",
        "model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2,2)))\n",
        "model.add(tf.keras.layers.Dropout(0.25))\n",
        "\n",
        "model.add(tf.keras.layers.Flatten())\n",
        "model.add(tf.keras.layers.Dense(256))\n",
        "model.add(tf.keras.layers.Activation('elu'))\n",
        "model.add(tf.keras.layers.Dropout(0.5))\n",
        "model.add(tf.keras.layers.Dense(10))\n",
        "model.add(tf.keras.layers.Activation('softmax'))\n",
        "model.summary()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "xLeZATVaNAnE"
      },
      "source": [
        "# Training on the TPU\n",
        "\n",
        "We're ready to train!   We first construct our model on the TPU, and compile it.\n",
        "\n",
        "Here we demonstrate that we can use a generator function and `fit_generator` to train the model.  You can also pass in `x_train` and `y_train` to `tpu_model.fit()` instead."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1005
        },
        "colab_type": "code",
        "id": "pWEYmd_hIWg8",
        "outputId": "4d8c725f-7b60-441a-d275-630b97935ee2"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Querying Tensorflow master (grpc://10.59.49.34:8470) for TPU system metadata.\n",
            "INFO:tensorflow:Found TPU system:\n",
            "INFO:tensorflow:*** Num TPU Cores: 8\n",
            "INFO:tensorflow:*** Num TPU Workers: 1\n",
            "INFO:tensorflow:*** Num TPU Cores Per Worker: 8\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, -1, 11569839400263179143)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, 5003998355805186677)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_GPU:0, XLA_GPU, 17179869184, 2810596560307881720)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 17179869184, 16906557648210167583)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 17179869184, 13740649709054049424)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 17179869184, 5781118081943316183)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 17179869184, 16654934860705655833)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 17179869184, 9677212331169726351)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 17179869184, 17110709740799721286)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 17179869184, 253202427909649502)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 17179869184, 4362254763543510947)\n",
            "INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 17179869184, 17574342772323101307)\n",
            "WARNING:tensorflow:tpu_model (from tensorflow.contrib.tpu.python.tpu.keras_support) is experimental and may change or be removed at any time, and without warning.\n",
            "INFO:tensorflow:Connecting to: grpc://10.59.49.34:8470\n",
            "Epoch 1/10\n",
            "INFO:tensorflow:New input shapes; (re-)compiling: mode=train, [TensorSpec(shape=(128, 28, 28, 1), dtype=tf.float32, name=u'batch_normalization_input0'), TensorSpec(shape=(128, 1), dtype=tf.float32, name=u'activation_1_target0')]\n",
            "INFO:tensorflow:Overriding default placeholder.\n",
            "INFO:tensorflow:Remapping placeholder for batch_normalization_input\n",
            "INFO:tensorflow:Started compiling\n",
            "INFO:tensorflow:Finished compiling. Time elapsed: 2.71582603455 secs\n",
            "INFO:tensorflow:Setting weights on TPU model.\n",
            " 99/100 [============================\u003e.] - ETA: 0s - loss: 0.8691 - sparse_categorical_accuracy: 0.7386INFO:tensorflow:New input shapes; (re-)compiling: mode=eval, [TensorSpec(shape=(128, 28, 28, 1), dtype=tf.float32, name=u'batch_normalization_input0'), TensorSpec(shape=(128, 1), dtype=tf.float32, name=u'activation_1_target0')]\n",
            "INFO:tensorflow:Overriding default placeholder.\n",
            "INFO:tensorflow:Remapping placeholder for batch_normalization_input\n",
            "INFO:tensorflow:Started compiling\n",
            "INFO:tensorflow:Finished compiling. Time elapsed: 1.62476110458 secs\n",
            "INFO:tensorflow:New input shapes; (re-)compiling: mode=eval, [TensorSpec(shape=(98, 28, 28, 1), dtype=tf.float32, name=u'batch_normalization_input0'), TensorSpec(shape=(98, 1), dtype=tf.float32, name=u'activation_1_target0')]\n",
            "INFO:tensorflow:Overriding default placeholder.\n",
            "INFO:tensorflow:Remapping placeholder for batch_normalization_input\n",
            "INFO:tensorflow:Started compiling\n",
            "INFO:tensorflow:Finished compiling. Time elapsed: 1.43118190765 secs\n",
            "100/100 [==============================] - 17s 174ms/step - loss: 0.8651 - sparse_categorical_accuracy: 0.7398 - val_loss: 1.2604 - val_sparse_categorical_accuracy: 0.5504\n",
            "Epoch 2/10\n",
            "100/100 [==============================] - 8s 80ms/step - loss: 0.4206 - sparse_categorical_accuracy: 0.8522 - val_loss: 0.8465 - val_sparse_categorical_accuracy: 0.7080\n",
            "Epoch 3/10\n",
            "100/100 [==============================] - 8s 80ms/step - loss: 0.3623 - sparse_categorical_accuracy: 0.8719 - val_loss: 0.4756 - val_sparse_categorical_accuracy: 0.8136\n",
            "Epoch 4/10\n",
            "100/100 [==============================] - 8s 78ms/step - loss: 0.2934 - sparse_categorical_accuracy: 0.8960 - val_loss: 0.3131 - val_sparse_categorical_accuracy: 0.8792\n",
            "Epoch 5/10\n",
            "100/100 [==============================] - 8s 81ms/step - loss: 0.2520 - sparse_categorical_accuracy: 0.9086 - val_loss: 0.2578 - val_sparse_categorical_accuracy: 0.9064\n",
            "Epoch 6/10\n",
            "100/100 [==============================] - 8s 80ms/step - loss: 0.2336 - sparse_categorical_accuracy: 0.9159 - val_loss: 0.2355 - val_sparse_categorical_accuracy: 0.9152\n",
            "Epoch 7/10\n",
            "100/100 [==============================] - 8s 81ms/step - loss: 0.2010 - sparse_categorical_accuracy: 0.9243 - val_loss: 0.2436 - val_sparse_categorical_accuracy: 0.9128\n",
            "Epoch 8/10\n",
            "100/100 [==============================] - 8s 80ms/step - loss: 0.1839 - sparse_categorical_accuracy: 0.9320 - val_loss: 0.2338 - val_sparse_categorical_accuracy: 0.9232\n",
            "Epoch 9/10\n",
            "100/100 [==============================] - 8s 83ms/step - loss: 0.1661 - sparse_categorical_accuracy: 0.9389 - val_loss: 0.2293 - val_sparse_categorical_accuracy: 0.9224\n",
            "Epoch 10/10\n",
            "100/100 [==============================] - 9s 87ms/step - loss: 0.1465 - sparse_categorical_accuracy: 0.9431 - val_loss: 0.2348 - val_sparse_categorical_accuracy: 0.9184\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "\u003ctensorflow.python.keras.callbacks.History at 0x7f0b7d344450\u003e"
            ]
          },
          "execution_count": 3,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import os\n",
        "tpu_model = tf.contrib.tpu.keras_to_tpu_model(\n",
        "    model,\n",
        "    strategy=tf.contrib.tpu.TPUDistributionStrategy(\n",
        "        tf.contrib.cluster_resolver.TPUClusterResolver(tpu='grpc://' + os.environ['COLAB_TPU_ADDR'])\n",
        "    )\n",
        ")\n",
        "tpu_model.compile(\n",
        "    optimizer=tf.train.AdamOptimizer(learning_rate=1e-3, ),\n",
        "    loss=tf.keras.losses.sparse_categorical_crossentropy,\n",
        "    metrics=['sparse_categorical_accuracy']\n",
        ")\n",
        "\n",
        "def train_gen(batch_size):\n",
        "  while True:\n",
        "    offset = np.random.randint(0, x_train.shape[0] - batch_size)\n",
        "    yield x_train[offset:offset+batch_size], y_train[offset:offset + batch_size]\n",
        "    \n",
        "\n",
        "tpu_model.fit_generator(\n",
        "    train_gen(1024),\n",
        "    epochs=10,\n",
        "    steps_per_epoch=100,\n",
        "    validation_data=(x_test, y_test),\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "ESL6ltQTMm05"
      },
      "source": [
        "# Checking our results (inference)\n",
        "\n",
        "Now that we're done training, let's see how well we can predict fashion categories!  Keras/TPU prediction isn't working due to a small bug (fixed in TF 1.12!), but we can predict on the CPU to see how our results look."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 525
        },
        "colab_type": "code",
        "id": "SaYPv_aKId2d",
        "outputId": "1857bd04-4692-41c6-f38d-bf3abb0805d3"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Copying TPU weights to the CPU\n"
          ]
        },
        {
          "data": {
            "image/png": "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\n+fLltG7dmtNPP53atWvz97//nezsbLZu3cqQIUM4+eST95vAlDTiSs+330HatWvHqlWr2LNnD7t3\n7w5nh1OmTKFNmzYMHTqU1q1bAzBt2jQGDBhAVlYWtWvX5q677qJVq1bhvp599lnGjBlDdnY2GRkZ\nPPTQQ9SqVQuArVu30rdvX6ZPn862bduoWLEi1atXj3xZpaJy5cqR7S1btoTy7t27I2UVKlQI5a1b\nt4byF19EF3Dm9cs6n4jl6xlgzZo1PPjgg3z66aeUK1eOq666ijvuuIMyZcpgjIm06fDhwxk+fDhb\ntmyhadOm9OvXj5o1awJuBvTAAw/w3nvvUbp0adq3b899990XvoCzsrK49957WbhwIZs3b2bTpk1k\nZ2fv91Us22Pbtm2hXKVK1DNh586doSy1FBCdEd15550Hd4cKjlhmuAXZR/v27Rv20blz5zJ06FBm\nz55NTk4O1atXp27duokZVsicOXNCecGCBaHsfzxXqrQvB3rbtm0jZRUrVgxlqQHp06dPpF758uVz\nvUkFRKHqoxdffDEAr776KmPGjGHNmjXUqFGDX//611x//fWUKlWKLVu2MGDAAKZPn052dja1a9em\nZ8+e4W9XrlzJo4/+f3tnHmZFda39FxzROAJCUBBRKEHmRkREBRQjiopGxWjUXEW/OFyvGuIYSBAT\nr4SoAdEkJhAj4HWMMVFRQIlDFJFB5s1MUGQQlAbBoOD3R3Vv3r3sKg9td3X3Oe/veXieddj71KlT\nu3btPu/aa617MHPmTOzYsQNt27bFrbfeihYtWgTnw2PASpNdl7iNn60AcPHFF3vbKhrMjh07yjxe\nJVHmmFbZgltpH5Qi//Tp08fbL7zwQk7H04KbSKWOadrk4DHmX0FacL8VVVYYe6cbEHjggQe8bX/h\nasHdZco1pjy/0uRz7sfzFQB22223Mtv4/4HCW3CrpaQshBBC5BtacIUQQogMyDtJOY3STTfA1+Uq\n3o3Ku1jTZGMrP7JkMW/ePG+PGTMm6HfJJZfsyml/W6qVXFURvPnmm96eP3++t610//vf70zHe++9\n93r7vffeC/o9+eST3r7wwgsTj8H3T5rMXQm7WC01TlJet26dt4cOHRq08RgWFRV5e86cMM89S4lL\nly719urVq4N+Z5xxhretm+GQQw7xNu98ZbcCAOxMCRzvwmb4GVBBVKs5mnQvl3e39sCBA709bNiw\n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\nRK5CYII=\n",
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x7f0b792d0350\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "LABEL_NAMES = ['t_shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt', 'sneaker', 'bag', 'ankle_boots']\n",
        "\n",
        "\n",
        "cpu_model = tpu_model.sync_to_cpu()\n",
        "\n",
        "from matplotlib import pyplot\n",
        "%matplotlib inline\n",
        "\n",
        "def plot_predictions(images, predictions):\n",
        "  n = images.shape[0]\n",
        "  nc = int(np.ceil(n / 4))\n",
        "  f, axes = pyplot.subplots(nc, 4)\n",
        "  for i in range(nc * 4):\n",
        "    y = i // 4\n",
        "    x = i % 4\n",
        "    axes[x, y].axis('off')\n",
        "    \n",
        "    label = LABEL_NAMES[np.argmax(predictions[i])]\n",
        "    confidence = np.max(predictions[i])\n",
        "    if i \u003e n:\n",
        "      continue\n",
        "    axes[x, y].imshow(images[i])\n",
        "    axes[x, y].text(0.5, 0.5, label + '\\n%.3f' % confidence, fontsize=14)\n",
        "\n",
        "  pyplot.gcf().set_size_inches(8, 8)  \n",
        "\n",
        "plot_predictions(np.squeeze(x_test[:16]), \n",
        "                 cpu_model.predict(x_test[:16]))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "GJAaFlQYNhoW"
      },
      "source": [
        "# Not bad!"
      ]
    }
  ],
  "metadata": {
    "accelerator": "TPU",
    "colab": {
      "collapsed_sections": [],
      "name": "Keras Fashion MNIST",
      "provenance": [],
      "version": "0.3.2"
    },
    "kernelspec": {
      "display_name": "Python 2",
      "name": "python2"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
